package gnss

func RtcmIsMsm7(msgid uint16) bool {
	return msgid == 1077 || msgid == 1087 || msgid == 1097 || msgid == 1017 || msgid == 1117 || msgid == 1127
}

func RtcmIsMsm4(msgid uint16) bool {
	return msgid == 1074 || msgid == 1084 || msgid == 1094 || msgid == 1014 || msgid == 1114 || msgid == 1124
}

func RtcmIsMsm5(msgid uint16) bool {
	return msgid == 1075 || msgid == 1085 || msgid == 1095 || msgid == 1015 || msgid == 1115 || msgid == 1125
}

func GetMsm4MsgIDByNaviSys(navisys byte) uint16 {
	switch navisys {
	case SYS_GPS:
		return 1074 // GPS
	case SYS_GLO:
		return 1084 // GLO
	case SYS_GAL:
		return 1094 // GAL
	case SYS_SBS:
		return 1104 // SBAS
	case SYS_QZS:
		return 1114 // QZSS
	case SYS_BD:
		return 1124 // BDS
	}
	return 0
}

func GetMsm7MsgIDByNaviSys(navisys byte) uint16 {
	switch navisys {
	case SYS_GPS:
		return 1077 // GPS
	case SYS_GLO:
		return 1087 // GLO
	case SYS_GAL:
		return 1097 // GAL
	case SYS_SBS:
		return 1107 // SBAS
	case SYS_QZS:
		return 1117 // QZSS
	case SYS_BD:
		return 1127 // BDS
	}
	return 0
}

func ConvertMsm7ToMsm4_MsgID(id uint16) uint16 {
	switch id {
	case 1077:
		return 1074 // GPS
	case 1087:
		return 1084 // GLO
	case 1097:
		return 1094 // GAL
	case 1017:
		return 1014 // SBAS
	case 1117:
		return 1114 // QZSS
	case 1127:
		return 1124 // BDS
	}
	return 0
}

func ConvertMsm7ToMsm4(msm7 *RtcmRawMsm7, msm4 *RtcmRawMsm4) {
	msm4.Header.CloneFrom(&msm7.Header)
	msm4.Header.MsgID = ConvertMsm7ToMsm4_MsgID(msm7.Header.MsgID)
	copy(msm4.RoughRng1[:], msm7.RoughRng1[:])
	copy(msm4.RoughRng2[:], msm7.RoughRng2[:])

	cellN := msm7.Header.CellN
	for i := U8_0; i < cellN; i++ {
		msm4.SetPsRngV(i, msm7.GetPsRngV(i))
		msm4.SetPhRngV(i, msm7.GetPhRngV(i))
		msm4.LkT[i] = byte(msm7.LkT[i])
		msm4.HalfAmb[i] = msm7.HalfAmb[i]
		msm4.CNR[i] = byte(msm7.GetCnrV(i))
	}
}
